Первые шаги с Docker и Kubernetes
Установка Docker Desktop
Docker Desktop — это графическое приложение, которое объединяет движок Docker, клиент командной строки и инструменты виртуализации. Для работы на Windows требуется активировать функции виртуализации в BIOS/UEFI материнской платы.
Системные требования
- Операционная система: Windows 10 или Windows 11 (версии 20H2 и выше).
- Архитектура процессора: x64 с поддержкой виртуализации (Intel VT-x / AMD-V).
- Память: минимум 4 ГБ ОЗУ (рекомендуется 8 ГБ и более).
- Диск: свободное место не менее 5 ГБ.
Пошаговая установка
- Скачивание установщика. Перейдите на официальный сайт проекта Docker и скачайте файл
Docker Desktop Installer.exe. - Запуск установки. Запустите скачанный файл от имени администратора.
- Настройка компонентов. В мастере установки отметьте галочками следующие опции:
- Использование гипервизора Hyper-V.
- Использование WSL 2 (Windows Subsystem for Linux) версии 2. Это критически важно для производительности и совместимости с Kubernetes.
- Завершение. Дождитесь окончания процесса и перезагрузите компьютер при необходимости.
- Первый запуск. Откройте приложение Docker Desktop. Иконка в трее должна стать зеленой, что свидетельствует о готовности движка.
Проверка работоспособности
Откройте терминал PowerShell или командную строку и выполните команду:
docker --version
Система выведет номер версии, например: Docker version 24.0.7, build afdd53b.
Выполните тестовый запуск образа для проверки изоляции процессов:
docker run hello-world
Команда скачает образ hello-world, запустит контейнер и выведет сообщение об успешной работе ядра Docker.
Работа с образами и запуск контейнеров
Образ (Image) — это неизменяемый шаблон, содержащий код приложения, библиотеки и зависимости. Контейнер — это запущенный экземпляр образа.
Получение образов из реестра
Реестр Docker Hub является основным хранилищем публичных образов. Для загрузки образа используйте команду pull.
Пример получения официального образа веб-сервера Nginx:
docker pull nginx:latest
Параметр latest указывает на последнюю стабильную версию. Можно указать конкретную версию, например nginx:1.25.
Просмотр доступных образов
Для проверки наличия загруженных образов используется команда:
docker images
Вывод содержит таблицу с колонками:
REPOSITORY: имя образа.TAG: версия образа.IMAGE ID: уникальный идентификатор слоя.CREATED: дата создания.SIZE: размер на диске.
Запуск контейнера
Команда run создает и запускает контейнер из указанного образа.
Базовый пример запуска Nginx:
docker run -d --name my-web-server nginx:latest
Разбор параметров:
-d: режим "detached" (запуск в фоновом режиме).--name: задание именного метки для контейнера (my-web-server).nginx:latest: имя и тег образа.
Проверка состояния контейнера
Список активных контейнеров отображается командой:
docker ps
Чтобы увидеть все контейнеры (включая остановленные), добавьте флаг -a:
docker ps -a
Доступ к приложению внутри контейнера
По умолчанию контейнеры изолированы от сети хоста. Чтобы открыть приложение по IP-адресу компьютера, необходимо пробросить порт.
Пример запуска с пробросом порта 80:
docker run -d -p 8080:80 --name my-web-server nginx:latest
Параметр -p 8080:80 означает:
- Левое число
8080: порт на хосте (Windows). - Правое число
80: порт внутри контейнера (стандартный порт Nginx).
Откройте браузер и перейдите по адресу http://localhost:8080. Вы увидите приветственную страницу Nginx.
Управление жизненным циклом
Остановка и удаление контейнера выполняются отдельными командами:
docker stop my-web-server
docker rm my-web-server
Для удаления всех контейнеров и очистки пространства можно использовать:
docker system prune
Эта команда удалит остановленные контейнеры, неиспользуемые сети и дубликаты образов.
Настройка Kubernetes на локальной машине
Kubernetes (K8s) — это система автоматизированного развертывания, масштабирования и управления контейнеризированными приложениями. Для локальной разработки на Windows используется встроенный в Docker Desktop компонент Kind или Minikube. В данном руководстве применяется стандартный режим Docker Desktop с включенным Kubernetes.
Активация Kubernetes в Docker Desktop
- Откройте настройки Docker Desktop (шестеренка в левом верхнем углу окна).
- Перейдите во вкладку Settings -> Kubernetes.
- Установите переключатель Enable Kubernetes в положение "Вкл".
- Нажмите кнопку Apply & Restart. Система перезапустит сервисы и создаст кластер.
Процесс может занять несколько минут. В трее появится индикатор статуса кластера.
Установка CLI клиента kubectl
Инструмент kubectl позволяет взаимодействовать с API сервером Kubernetes. Он устанавливается автоматически вместе с Docker Desktop, но его наличие нужно проверить.
kubectl version --client
Если вывод показывает ошибку, скачайте бинарный файл kubectl.exe с официального сайта Kubernetes и поместите его в папку, добавленную в переменную окружения PATH.
Проверка состояния кластера
Команда get nodes отображает узлы (ноды) кластера.
kubectl get nodes
Ожидаемый вывод:
NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane,master 5m v1.29.0
Статус Ready означает, что нода готова принимать рабочие нагрузки.
Развёртывание приложения и оркестрация
Оркестрация включает создание манифестов (описаний ресурсов), их применение к кластеру и мониторинг состояния.
Создание манифеста Deployment
Манифест описывает желаемое состояние приложения. Создайте файл deployment.yaml со следующим содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
Пояснение структуры файла:
apiVersion: версия API Kubernetes (для деплоймента этоapps/v1).kind: тип ресурса (Deployment).replicas: количество идентичных копий (подов) приложения. Значение2означает запуск двух экземпляров.selector.matchLabels: фильтр для поиска подов, управляемых этим деплойментом.template.spec.containers: описание контейнера внутри пода.
Применение конфигурации
Для внедрения ресурса в кластер используется команда apply:
kubectl apply -f deployment.yaml
Система сообщит о создании ресурса:
deployment.apps/my-app-deployment created
Проверка работы подов
Под (Pod) — минимальная единица развёртывания в Kubernetes. Команда get pods показывает статус созданных экземпляров:
kubectl get pods
Пример вывода:
NAME READY STATUS RESTARTS AGE
my-app-deployment-5d4f8b7c9-x2k4l 1/1 Running 0 10s
my-app-deployment-5d4f8b7c9-j9m3n 1/1 Running 0 10s
Статус Running и значение 1/1 означают, что контейнер успешно запустился.
Масштабирование приложения
Kubernetes позволяет изменять количество реплик без остановки сервиса.
Увеличение количества копий до 5:
kubectl scale deployment my-app-deployment --replicas=5
Проверка результата:
kubectl get pods
Теперь в списке будет пять работающих подов.
Предоставление доступа извне
По умолчанию поды доступны только внутри кластера. Для доступа из браузера необходимо создать службу типа LoadBalancer или NodePort.
Создайте файл service.yaml:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
Применение службы:
kubectl apply -f service.yaml
Получение информации о службе:
kubectl get svc my-app-service
В режиме Docker Desktop на Windows адрес внешней службы часто присваивается автоматически через внутренний прокси. Если статус EXTERNAL-IP равен <pending>, используйте команду port-forward для локального доступа:
kubectl port-forward svc/my-app-service 8080:80
Теперь приложение доступно по адресу http://localhost:8080.
Мониторинг и управление
Эффективное управление требует постоянного отслеживания логов и ресурсов.
Просмотр логов
Для просмотра вывода приложения из конкретного пода:
kubectl logs my-app-deployment-5d4f8b7c9-x2k4l
Просмотр логов всех подов в рамках деплоймента:
kubectl logs -l app=my-app
Описание ресурса
Команда describe предоставляет детальную информацию о состоянии объекта, включая события и ошибки:
kubectl describe pod my-app-deployment-5d4f8b7c9-x2k4l
В разделе Events можно увидеть процессы создания, привязки к узлу и возможные сбои.
Удаление ресурсов
Для полного удаления приложения из кластера:
kubectl delete -f deployment.yaml
kubectl delete -f service.yaml
Или удаление одного ресурса по имени:
kubectl delete deployment my-app-deployment